GtkBuilder: add GtkApplication
authorRyan Lortie <desrt@desrt.ca>
Sun, 16 Jun 2013 20:29:50 +0000 (16:29 -0400)
committerRyan Lortie <desrt@desrt.ca>
Tue, 15 Oct 2013 13:24:11 +0000 (09:24 -0400)
Add a GtkApplication (private) field to GtkBuilder

docs/reference/gtk/gtk3-sections.txt
gtk/gtkbuilder.c
gtk/gtkbuilder.h

index 88c251e4ab83c06d891b1287544a3684d59fe672..b8741385145e28878d7c05fd9421827e73f9c197 100644 (file)
@@ -604,6 +604,8 @@ gtk_builder_add_callback_symbols
 gtk_builder_lookup_callback_symbol
 gtk_builder_set_translation_domain
 gtk_builder_get_translation_domain
+gtk_builder_set_application
+gtk_builder_get_application
 gtk_builder_get_type_from_name
 gtk_builder_value_from_string
 gtk_builder_value_from_string_type
index 5e3af21a7b19d5248c4ec04f670e959b6415e2db..38d71f1bd14b3d9825495c34f49701aaa2af3718 100644 (file)
@@ -286,6 +286,7 @@ struct _GtkBuilderPrivate
   gchar *filename;
   gchar *resource_prefix;
   GType template_type;
+  GtkApplication *application;
 };
 
 G_DEFINE_TYPE_WITH_PRIVATE (GtkBuilder, gtk_builder, G_TYPE_OBJECT)
@@ -2514,3 +2515,63 @@ gtk_builder_new_from_string (const gchar *string,
 
   return builder;
 }
+
+/**
+ * gtk_builder_set_application:
+ * @builder: a #GtkBuilder
+ * @application: a #GtkApplication
+ *
+ * Sets the application associated with @builder.
+ *
+ * You only need this function if there is more than one #GApplication
+ * in your process.  @application cannot be %NULL.
+ *
+ * Since: 3.10
+ **/
+void
+gtk_builder_set_application (GtkBuilder     *builder,
+                             GtkApplication *application)
+{
+  g_return_if_fail (GTK_IS_BUILDER (builder));
+  g_return_if_fail (GTK_IS_APPLICATION (application));
+
+  if (builder->priv->application)
+    g_object_unref (builder->priv->application);
+
+  builder->priv->application = g_object_ref (application);
+}
+
+/**
+ * gtk_builder_get_application:
+ * @builder: a #GtkBuilder
+ *
+ * Gets the #GtkApplication associated with the builder.
+ *
+ * The #GtkApplication is used for creating action proxies as requested
+ * from XML that the builder is loading.
+ *
+ * By default, the builder uses the default application: the one from
+ * g_application_get_default().  If you want to use another application
+ * for constructing proxies, use gtk_builder_set_application().
+ *
+ * Returns: (transfer none): the application being used by the builder,
+ *     or %NULL
+ *
+ * Since: 3.10
+ **/
+GtkApplication *
+gtk_builder_get_application (GtkBuilder *builder)
+{
+  g_return_if_fail (GTK_IS_BUILDER (builder));
+
+  if (!builder->priv->application)
+    {
+      GApplication *application;
+
+      application = g_application_get_default ();
+      if (application && GTK_IS_APPLICATION (application))
+        builder->priv->application = g_object_ref (GTK_APPLICATION (application));
+    }
+
+  return builder->priv->application;
+}
index 5bdbe0d1dd38edfde99d7f0219c2074245a165df..de415646ee49ac9abbee1d4bf67a50f1fe1dd8ef 100644 (file)
@@ -23,6 +23,7 @@
 #error "Only <gtk/gtk.h> can be included directly."
 #endif
 
+#include <gtk/gtkapplication.h>
 #include <gtk/gtkwidget.h>
 
 G_BEGIN_DECLS
@@ -200,6 +201,14 @@ GDK_AVAILABLE_IN_3_10
 GCallback    gtk_builder_lookup_callback_symbol  (GtkBuilder    *builder,
                                                  const gchar   *callback_name);
 
+GDK_AVAILABLE_IN_3_10
+void         gtk_builder_set_application         (GtkBuilder     *builder,
+                                                  GtkApplication *application);
+
+GDK_AVAILABLE_IN_3_10
+GtkApplication * gtk_builder_get_application     (GtkBuilder     *builder);
+
+
 /**
  * GTK_BUILDER_WARN_INVALID_CHILD_TYPE:
  * @object: the #GtkBuildable on which the warning ocurred